#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n,m;
    cin>>n>>m;
    vector<vector<int>>dp(n+1,vector<int>(m+1,-1));
    dp[0][0]=0;
    vector<int>v(n+1),w(n+1);
    for(int i=1;i<=n;i++)
        cin>>v[i]>>w[i];
    int res=-1;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m;j++){
            dp[i][j]=dp[i-1][j];
            if(j-v[i]>=0&&dp[i][j-v[i]]!=-1)dp[i][j]=max(dp[i][j],dp[i][j-v[i]]+w[i]);
            res=max(res,dp[i][j]);
        }
    }
    cout<<res<<endl<<(dp[n][m]==-1?0:dp[n][m]);
}
//空间优化
int main(){
    int n,m;
    cin>>n>>m;
    vector<int>v(n+1),w(n+1);
    vector<int>dp(m+1,-1);
    for(int i=1;i<=n;i++){
        cin>>v[i]>>w[i];
    }
    dp[0]=0;
    int res=-1;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m;j++){
            if(j-v[i]>=0&&dp[j-v[i]]!=-1)
                dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
            res=max(res,dp[j]);
        }
    }
    cout<<res;//<<endl<<(dp[m]==-1?0:dp[m]);
    return 0;
}